﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SG.Domain;

namespace SG.Logic.Stock
{
   
public class ExponencialTendencia: Exponencial {


    public  double CalcularPromedio(double dr, double promAnt, double tendAnt, double alpha)
    {
        return (alpha*dr+(1.0-alpha)*(promAnt+tendAnt));
    }
    
    public  double CalcularTendencia(double promAct, double promAnt, double tendAnt, double beta) {
        return (beta*(promAct - promAnt)+(1.0-beta)*tendAnt);
    }

  
    public override void ActualizarPeriodo(Periodo anterior, Periodo nuevo) {
        double tendAct;

        _prom = CalcularPromedio(nuevo.Demanda, anterior.Promedio, anterior.Tendencia, anterior.Articulo.Alpha);
        tendAct = CalcularTendencia(_prom, anterior.Promedio, anterior.Tendencia, anterior.Articulo.Beta);
        nuevo.Promedio=_prom;
        nuevo.Tendencia=tendAct;
        CalcularErrores(anterior, nuevo);
    }

   
    public override double GenerarPrediccion(Periodo perUltimo, int h){
        return (perUltimo.Promedio+h*perUltimo.Tendencia);
    }

    public override double CalcularDesviacionEst(double mseAct)
    {
        return (Math.Sqrt(mseAct));
    }

}
}
